// 引入SDK核心类
var QQMapWX = require('../libs/qqmap-wx-jssdk.min.js');

// 实例化API核心类
var qqmapsdk = new QQMapWX({
  key: 'ELKBZ-FBKH3-FYJ3Q-3NU4L-BKUN6-ZKBQ3' // 必填
});

// 图片公用的src
var img_gy_src = "/imgs";
var img_gy_src = "https://www.yifale.com/static/imgs";
var image_gy_src = "https://www.yifale.com/static/images";

// 请求公用的url
var ajax_gy_url = 'https://www.yifale.com/api';
var root_url = 'https://www.yifale.com';
var header = {
  'Accept': 'application/json',
  'content-type': 'application/x-www-form-urlencoded',
  "token": getApp().globalData.token
};

// 网络请求（GET）
function ajax_get(obj) {
  obj.method = "GET";
  ajax(obj);
}
// 网络请求（POST）
function ajax_post(obj) {
  obj.method = "POST";
  ajax(obj);
}
// 网络请求
function ajax(obj) {
  wx.request({
    url: ajax_gy_url + obj.url,
    method: obj.method ? obj.method : "GET",
    data: obj.data ? obj.data : {},
    header: {
      'Accept': 'application/json',
      'content-type': 'application/x-www-form-urlencoded',
      "token": getApp().globalData.token
    },
    success: function(res) {

      if (obj.success) {
        obj.success(res);
      }
    },
    fail: function(res) {
      if (obj.fail) {
        obj.fail(res);
      }
    },
    complete: function() {
      if (obj.complete) {
        obj.complete(res);

      }
    }
  })
}

// 获取e中的值
function get_e_value(e, key, success) {
  success(e.currentTarget.dataset[key]);
}

// 打开一个新页面
function open(url) {
  wx.navigateTo({
    url: url
  })
}

// 当前页打开新页面
function href(url) {
  wx.redirectTo({
    url: url
  })
}

// 页面返回
function back(delta) {
  wx.navigateBack({
    delta: delta
  })
}

// 页面返回
function ti_shi(data) {
  wx.showToast({
    // 提示的内容
    title: data.title,
    // 图标(success)
    icon: data.icon ? data.icon : "none",
    // 自定义图标的本地路径,image 的优先级高于 icon
    image: data.image,
    // 提示的延迟时间
    duration: data.time ? data.time : 1500,
    // 是否显示透明蒙层，防止触摸穿透(false)
    mask: data.mask,
    // 接口调用成功的回调函数
    success: data.success,
    // 接口调用失败的回调函数
    fail: data.fail,
    // 接口调用结束的回调函数（调用成功、失败都会执行）
    complete: data.complete,
  })
}


// 图片预览函数
function yu_lan(current, urls) {
  wx.previewImage({
    current: current, // 当前显示图片的https链接
    urls: urls // 需要预览的图片https链接列表
  })
}

// 封装一个上传图片的函数
function add_img(length, success) {
  // 获取本地图片的路径
  wx.chooseImage({
    count: length, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
    success: function(res) {
      // 显示上传动画
      wx.showLoading({
        title: '图片上传中...',
      })
      // 将新添加的图片添加到imgs_arr中
      var imgs = res.tempFilePaths;
      // 调用上传图片的函数
      file_img(imgs, 0, success);
    }
  })
}

// 封装一个上传图片的函数
function file_img(imgs, index, success) {
  // 如果数组长度大于下标，说明没有上传完
  if (imgs.length > index) {
    var src = imgs[index];
    //上传图片
    wx.uploadFile({
      url: ajax_gy_url + "/common/upload",
      filePath: src,
      name: 'file',
      success: function(res) {
        success({
          data: JSON.parse(res.data),
          success: function() {
            // 调用上传图片的函数
            file_img(imgs, index + 1, success);
          }
        });
      },
      error: function(e) {
        wx.hideLoading();
      },
    })
  } else {
    wx.hideLoading();
  }
}

// 获取用户授权信息
function get_root(success) {
  // 获取用户的授权信息
  wx.getSetting({
    success: (root) => {
      success(root);
    }
  })
}

// 判断用户有没有授权获取地理位置
function get_root_ding_wei(success) {
  get_root((root) => {
    var br;
    if (root.authSetting["scope.userLocation"]) { //授权了获取位置信息
      br = true;
    } else { //没有授权获取位置信息
      br = false;
    }
    success(br);
  })
}
// 获取用户当前位置所在的经纬度
function ding_wei(success) {
  wx.getLocation({
    type: 'gcj02',
    success: function(res) { //已经授权定位
      success({
        root: true,
        jing_du: res.longitude,
        wei_du: res.latitude
      })
    },
    fail: function(res) {
      wx.authorize({
        scope: 'scope.userLocation',
        complete: function() {
          success({
            root: false,
          })
        }
      })
    }
  })
}
// 打开地图进行选点
function xuan_dian(success) {
  wx.chooseLocation({
    success: function(res) {
      success({
        root: true,
        // 地点名称
        name: res.name,
        // 详细地址
        di_zhi: res.address,
        // 经纬度
        jing_du: res.longitude,
        wei_du: res.latitude
      });
    },
    fail: function(res) {
      success({
        root: false,
      })
    }
  });
}
// 打开地图
function open_map(lng, lat, name) {
  wx.openLocation({
    latitude: lat,
    longitude: lng,
    name: name
  })
}

// 微信支付函数
function zhi_fu(data, success, fail) {
  wx.requestPayment({
    'timeStamp': data.timeStamp,
    'nonceStr': data.nonceStr,
    'package': data.package,
    'signType': data.signType,
    'paySign': data.paySign,
    'success': function(res) {
      success(res);
    },
    'fail': function(res) {
      fail(res);
    }
  })
}

function root_ajax(obj) {
  // 如果需要加载动画
  if (obj.loading) {
    wx.showLoading({
      title: obj.loading_title ? obj.loading_title : "加载中...",
    })
  }
  wx.request({
    url: root_url + obj.url,
    method: obj.method ? obj.method : "GET",
    data: obj.data ? obj.data : null,
    header: header,
    success: function(res) {
      obj.success(res);
    },
    error: function(res) {
      obj.error(res);
    },
    complete: function() {
      if (obj.loading) {
        wx.hideLoading();
      }
    }
  })
}

// 判断有没有登陆的函数
function deng_lu(success) {
  var token = getApp().globalData.token;
  if (!token) {
    wx.showToast({
      title: '请先登录',
      icon: 'none',
      duration: 2000,
      success: function() {
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
    })
  } else {
    success();
  }
}

function connectWss() {
  wx.connectSocket({
    url: 'wss://www.yifale.com/wss',
    success: function(res) {
      console.log('连接成功');
    }
  });
}

// 获取用户数据
function get_user_data(success) {
  ajax_get({
    url: "/user/detail",
    success: (res) => {
      let data = res.data.data;
      if (res.data.code == "401") {
        wx.showToast({
          title: '请先注册成为会员',
          icon: 'none',
          duration: 2000,
          success: function() {
            // wx.navigateTo({
            //   url: '/pages/login/login'
            // })
          }
        })
        if (success) {
          success(-1);
        }
      } else {
        wx: wx.setStorage({
          key: 'userinfo',
          data: data,
        })
        getApp().globalData.userinfo = data;
        if (success) {
          success(data);
        }
      }
    }
  })
}

// 获取access_token
function access_token(success) {
  ajax_get({
    url: "/token/getAccessToken",
    success: (res) => {
      success(res.data.access_token);
    }
  })
}

const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src';

const base64src = function(base64data, success, fail) {
  const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
  if (!format) {
    fail(new Error('ERROR_BASE64SRC_PARSE'));
  }
  const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
  const buffer = wx.base64ToArrayBuffer(bodyData);
  fsm.writeFile({
    filePath,
    data: buffer,
    encoding: 'binary',
    success() {
      success(filePath);
    },
    fail() {
      fail(new Error('ERROR_BASE64SRC_WRITE'));
    },
  });
};

// 显示加载动画
function show(title = "加载中...") {
  wx.showLoading({
    title: title,
  })
}
// 关闭加载动画
function hide() {
  wx.hideLoading();
}

// 打开授权设置页面，要写在点击事件里面才管用，无法直接调用
function open_root() {
  wx.openSetting({});
}

// 显示模态对话框
function dui_hua(obj) {
  let showCancel = true;
  if (obj.l_show == false) {
    showCancel = false;
  }
  wx.showModal({
    // 对话框的标题(选填)
    title: obj.title ? obj.title : "",
    // 对话框的内容(选填)
    content: obj.content ? obj.content : "",
    // 是否显示左边的按钮(选填，默认显示)
    showCancel: showCancel,
    // 左边按钮的文字内容(选填，默认取消)
    cancelText: obj.l_text ? obj.l_text : "取消",
    // 左边按钮的文字颜色(选填，默认#000000)
    cancelColor: obj.l_color ? obj.l_color : "#000000",
    // 右边按钮的文字内容(选填，默认确定)
    confirmText: obj.r_text ? obj.r_text : "确定",
    // 右边按钮的文字颜色(选填，默认#3cc51f)
    confirmColor: obj.r_color ? obj.r_color : "#3cc51f",
    success: function(res) {
      if (res.confirm) { // 点击了确定按钮
        if (obj.r_fun) {
          obj.r_fun();
        }
      } else { // 点击了取消按钮
        if (obj.l_fun) {
          obj.l_fun();
        }
      }
    }
  })
}

// 获取input中的value值
function value(e) {
  return e.detail.value;
}
// 获取自定义的data值
function data(e, key) {
  let value;
  if (typeof(key) == "string") {
    value = e.currentTarget.dataset[key];
  } else {
    const obj = {};
    key.forEach((str) => {
      obj[str] = e.currentTarget.dataset[str];
    })
    value = obj;
  };
  return value;
}

// 动态设置当前页面的标题
function title(title) {
  wx.setNavigationBarTitle({
    title: title
  })
}

// 拨打电话
function call(phone) {
  wx.makePhoneCall({
    phoneNumber: phone,
  })
}

module.exports = {
  // 图片预览函数
  yu_lan: yu_lan,
  // 判断有没有登陆的函数
  deng_lu: deng_lu,
  // 图片公用的src
  img_gy_src: img_gy_src,
  image_gy_src: image_gy_src,
  // 图片上传函数
  add_img: add_img,
  // 网络请求
  ajax: ajax,
  // 网络请求（GET）
  ajax_get: ajax_get,
  // 网络请求（POST）
  ajax_post: ajax_post,
  root_ajax: root_ajax,
  // 打开一个新页面
  open: open,
  // 当前页打开新页面
  href: href,
  // 页面返回
  back: back,
  // 提示
  ti_shi: ti_shi,
  // 判断用户有没有授权获取地理位置
  get_root_ding_wei: get_root_ding_wei,
  // 获取用户当前位置所在的经纬度
  ding_wei: ding_wei,
  // 打开地图进行选点
  xuan_dian: xuan_dian,
  // 获取e中的值
  get_e_value: get_e_value,
  // 微信支付函数
  zhi_fu: zhi_fu,
  //链接socket
  connectWss,
  // 获取用户数据
  get_user_data: get_user_data,
  // 获取access_token
  access_token: access_token,
  // 获取64位码的本地路径
  base64src: base64src,
  // 显示加载动画
  show: show,
  // 关闭加载动画(直接调用就好，和show成对使用)
  hide: hide,
  // 打开授权设置页面
  open_root: open_root,
  // 显示模态对话框
  dui_hua: dui_hua,
  // 获取input中的value值
  value: value,
  // 获取自定义的data值
  data: data,
  qqmapsdk: qqmapsdk,
  // 动态设置当前页面的标题
  title: title,
  // 打开地图
  open_map: open_map,
  // 拨打电话
  call: call,
}